package com.yifeng.repo.controller.excel.loader.biz;

import com.alibaba.excel.support.ExcelTypeEnum;
import com.yifeng.repo.controller.excel.loader.dto.DataTaskTypeEnum;
import com.yifeng.repo.controller.excel.loader.dto.RowDataDto;

import java.util.List;
import java.util.Map;

/**
 * Created by daibing on 2022/12/29.
 */
public interface BizExportAction extends BizBaseAction {

    /**
     * 业务动作对应导出模板的URL
     */
    String templateUrl();

    /**
     * 导出excel模板的头：excel头的每列对应的英文code，从0开始
     */
    Map<Integer, String> templateHeader(int sheetNo);

    /**
     * 偏移量字段名
     */
    default String offsetIdFieldName(int sheetNo) {
        return "id";
    }

    /**
     * 导出excel的内容来源: 获取源数据
     * 1、支持多sheet：数据包中指定sheetNo（从0开始），根据数据中的sheetNo写入指定的单元表。
     * 2、支持UUID主键：业务代码分段获取需要导出的id列表（比如1万条），导出任务调度source接口获取一批数据（业务可以根据500个id获取数据），每次调度接口的offsetId仅用来检查和上一次id的连续性。
     *
     * @param sheetNo 上一次获取数据的最后一条的sheetNo，第一次source的时候是0
     * @param offsetId 偏移量id
     * @param size     条数
     * @return 导出excel的数据行集合
     */
    List<RowDataDto> source(int sheetNo, String offsetId, int size);

    /**
     * 总数据量
     *
     * @return int
     */
    default int totalNumber() {
        return -1;
    }

    /**
     * 获取导出excel的数据结果文件-上传oss的文件名
     */
    default String getResultFileUri(String requestKey, DataTaskTypeEnum type) {
        return "/excel/" + type.name().toLowerCase() + "/" + requestKey + ExcelTypeEnum.XLSX.getValue();
    }
}
